home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / enigma / earcd / sviluppo / svilupp2 / whdload.lha / WHDLoad / src / chaosengine.asm < prev    next >
Assembly Source File  |  1996-07-03  |  4KB  |  190 lines

  1. ;*---------------------------------------------------------------------------
  2. ;  :Program.    chaosengine.asm
  3. ;  :Contents.    Slave for ChaosEngine
  4. ;  :Author.    BJ
  5. ;  :History.    20.05.96
  6. ;  :Requires.    -
  7. ;  :Copyright.    Public Domain
  8. ;  :Language.    68000 Assembler
  9. ;  :Translator.    Barfly V1.131
  10. ;  :To Do.
  11. ;---------------------------------------------------------------------------*
  12.  
  13.     INCDIR    Includes:
  14.     INCLUDE    whdload.i
  15.  
  16.     OUTPUT    wart:chaosengine/ce.slave
  17.     BOPT    O+ OG+            ;enable optimizing
  18.     BOPT    w4-            ;disable 64k warnings
  19.  
  20. ;======================================================================
  21.  
  22. .base        SLAVE_HEADER        ;ws_Security + ws_ID
  23.         dc.w    1        ;ws_Version
  24.         dc.w    WHDLF_Disk    ;ws_flags
  25. .upchip        dc.l    $ff000        ;ws_BaseMemSize
  26.         dc.l    $f2800        ;ws_ExecInstall
  27.         dc.w    .Start-.base    ;ws_GameLoader
  28.         dc.w    0        ;ws_CurrentDir
  29.         dc.w    0        ;ws_DontCache
  30.  
  31. ;======================================================================
  32. .Start        ;    A0 = resident loader
  33. ;======================================================================
  34.  
  35.         lea    (_resload,pc),a1
  36.         move.l    a0,(a1)            ;save for later using
  37.  
  38.         move.l    #CACRF_EnableI,d0    ;enable instruction cache
  39.         move.l    d0,d1            ;mask
  40.         jsr    (resload_SetCACR,a0)
  41.  
  42.         move.l    #$9c00,d0        ;offset     $3400 for not enough mem
  43.         move.l    #$15c00,d1        ;size
  44.         moveq    #1,d2            ;disk
  45.         lea    $80000,a0
  46.         bsr    _LoadDisk
  47.         
  48.         clr.l    $8            ;lower bound fastmem
  49.         move.l    (.upchip),$14        ;uppper bound chipmem
  50.         move.l    #3,$24            ;flags
  51.         
  52.         lea    $80000,a4
  53.         MOVE.L    $0020(A4),D0
  54.         ADD.L    D0,D0
  55.         ADD.L    D0,D0
  56.         LEA    $002C(A4,D0.L),A1
  57.         CLR.L    (A1)
  58.         MOVE.L    A1,D0
  59.         LSR.L    #2,D0
  60.         MOVE.L    D0,$0020(A4)
  61.  
  62.         move.l    #$4e714e71,$24+$1d0(a4)
  63.         Jsr    $0024+4(A4)        ;decrunch
  64.  
  65.         patch    $84f5e,_loader
  66.  IFD wmode
  67.         patch    $8a3ec,_cl
  68.  ENDC
  69.         jmp    $24+$1ec(a4)        ;start the dance
  70.  
  71. ;--------------------------------
  72.  
  73.  IFD wmode
  74. _cl        add.w    #$9c4,a7
  75.         move.l    #$711e7e0c,$100
  76.         rts
  77.  ENDC
  78.  
  79. _loader        movem.l    d1-d3/a0-a1,-(a7)
  80.  
  81.         moveq    #0,d3
  82.         cmp.w    #$16,d1        ;accessing disk-id (chaos special)
  83.         bne    .go
  84.         move.w    (.dchk),d3
  85.         not.w    d3
  86.         bne    .go
  87.         
  88.         lea    (.disk),a1
  89.         addq.w    #1,(a1)
  90.         move.w    (a1),d3
  91.         cmp.w    #3,d3
  92.         bne    .g1
  93.         move.w    #1,(a1)
  94. .g1        moveq    #0,d3
  95.  
  96. .go        lea    (.dchk),a1
  97.         move.w    d3,(a1)
  98.  
  99.         mulu    #512,d1        ;start on disk
  100.         move.l    d1,d0        ;offset
  101.         mulu    #512,d2        ;amount of blocks
  102.         move.l    d2,d1        ;size
  103.         moveq    #0,d2
  104.         move.w    (.disk),d2    ;disk
  105.         bsr    _LoadDisk
  106.         movem.l    (a7)+,d1-d3/a0-a1
  107.         moveq    #0,d0
  108.  
  109.         bsr    _kinit
  110.  
  111.         rts
  112.  
  113. .dchk        dc.w    0
  114. .disk        dc.w    1
  115.  
  116. ;--------------------------------
  117.  
  118. _kinit        movem.l    a0-a1,-(a7)
  119.         lea    (_keyboard,pc),a1
  120.         cmp.l    $68,a1
  121.         beq    .q
  122.         lea    (_realint68,pc),a0
  123.         move.l    $68,(a0)
  124.         move.l    a1,$68
  125. .q        movem.l    (a7)+,a0-a1
  126.         rts
  127.  
  128. _realint68    dc.l    0
  129.  
  130. _keyboard    move.l    d0,-(a7)
  131.         move.b    $bfec01,d0
  132.         ror.b    #1,d0
  133.         not.b    d0
  134.  
  135. ; RAW-Key-Codes:
  136. ;    ESC    $45
  137. ;    DEL    $46
  138. ;    F1..F10    $50..$59
  139. ;    HELP    $5f
  140.  
  141.         cmp.b    #$58,d0
  142.         bne    .1
  143.         move.l    (a7)+,d0
  144.         bra    _debug            ;coredump & quit
  145. .1
  146.         cmp.b    #$59,d0
  147.         beq    _exit            ;exit
  148.  
  149.         move.l    (a7)+,d0
  150.         move.l    (_realint68),-(a7)    ;enter orginal rou.
  151.         rts
  152.  
  153. ;--------------------------------
  154.  
  155. _resload    dc.l    0            ;address of resident loader
  156.  
  157. ;--------------------------------
  158. ; IN:    d0=offset d1=size d2=disk a0=dest
  159. ; OUT:    d0=size
  160.  
  161. _LoadDisk    movem.l    d1-d2/a0-a2,-(a7)
  162.         move.l    (_resload),a2
  163.         jsr    (resload_DiskLoad,a2)
  164.         tst.l    d0
  165.         beq    .err
  166.         movem.l    (a7)+,d1-d2/a0-a2
  167.         rts
  168. .err        move.l    d1,d0
  169.         movem.l    (a7)+,d1-d2/a0-a2
  170.         move.l    d2,-(a7)        ;disk number
  171.         move.l    d0,-(a7)        ;doserror
  172.         move.l    #TDREASON_DISKLOAD,-(a7)
  173.         move.l    (_resload),-(a7)
  174.         add.l    #resload_Abort,(a7)
  175.         rts
  176.  
  177. ;--------------------------------
  178. ;stop the dance
  179.  
  180. _exit        move.l    #TDREASON_OK,-(a7)
  181.         bra    _end
  182. _debug        move.l    #TDREASON_DEBUG,-(a7)
  183. _end        move.l    (_resload,pc),-(a7)
  184.         add.l    #resload_Abort,(a7)
  185.         rts
  186.  
  187. ;======================================================================
  188.  
  189.     END
  190.